iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0

這邊來介紹一下 Terraform variable 的部分, Variable 算是做 DevOps 幾次於流程的另一個重要的議題,為了就是面對系統架構客戶不斷地奇怪要求的產生,然後系統就要配合改變。

如果好一點的話系統穩定後又要 clone,甚至要更新,這時候就會很頭疼,因為有些 manual setting 的部分就忘記,所以 CI CD 的時候就會忽略掉這些資訊就會錯誤

這章節要整理的內容跟整合的概念有點多,所以拆成兩天來討論

What kinds of situations need to use variables?

以前對於寫程式來講,Variable 就是變數的意思。顧名思義,變數應該是常常被改變數值的暫存空間

但是另外還有一種變數就是 Constant Variable 就是所謂的常數,為什麼這邊是說所謂的常數?因為在 infrastructure 的時候,幾本上變數不太會異動(會異動的就不會寫在 Terraform 使用),但是這些資訊又很重要不能忽略不用,甚至整個cluster 都會跟著使用

另外 Terraform variable 的用法其實很簡單,放在 variables.tf 或者其他 tf file 也可以讀取得到,例如下面的範例:

使用情境就是建立一個 Cluster,然後這個 IaC 會因為我ip 不同,所以就需要設定不同的IP

variables.tf

variable "my_ip" {
	description = "Say something to describe this variable"
	type = string
	default = "127.0.0.1"
}

variable "cluster_name" {
	description = "Name of clsuter"
	type = string
	default = "my-cluster" 
}

variable "env" {
	type = string
	description ="stage"
}

另外,如果有設定 default value的話,在 terraform 的 plan & deploy 階段就不需要額外指定變數的值,反而沒有設定 default value 的話,就需要在 command 那邊下,不然會跳錯誤,因為沒有設定 default value

terraform apply -var="env=dev"

目前到這邊看起來很簡單清楚,透過 variable 來存放 cluster name 跟 ip ,如果需要更改 my ip 甚至更改 cluster name的話,在這邊做更改就可以了。

Distinguish env by terraform .tfvars

但是往往事情不是想像中的這麼簡單就可以應付需求,對於一個產品可能會區分開發的環境,這邊就用 dev 代表開發的環境,另外一個就是所謂的開發環境,那這個一個小小的改變,就會影響很多的變數跟著異動,總不能一個一個 variable 更改複製吧?

因此就會產生出來 變數定義檔 .tfvars ,而這邊接下來就要來解釋這個應用跟情境,簡單來講就是先定義使用相同變數名稱,但是其 variables 的部分會更換,以下就是 switch dev and production

首先在project folder 下面就有兩個 tfvars 的檔案,然後還有一個宣告 variables 的 tf file,而 [variables.tf](http://variables.tf) 的部分跟上面的是一樣的,所以就不重複打出來

Project-folder
- variables-dev.tfvars
- variables-prod.tfvars
- variables.tf

File : variables-dev.tfvars

my_ip = "127.0.0.1"
cluster_name = "dev-clsuter"
env = "dev"

File : variables-prod.tfvars

my_ip = "123.145.167.189"
cluster_name = "prod-clsuter"
env = "prod"

以上都是對於 variables 上面的區分

接下來就是 command 的細節,利用 variable file 來切換變數之間的設定,這樣一來也不會因為某些變數沒改到,所以導致設定錯誤的狀況

terraform apply -var-file="variables-dev.tfvars"

If you feel that is the end, you are wrong.

再來這兩個都是使用變數的方法,然後切換。但是這些就是基本變數的用法而已,另外機敏的變數要怎麼處理?例如: AWS access token id ,但是總不能不使用 access token id 這樣怎麼 deploy 或者 authrization service.

但總不能要打在 .tfvars 上面吧?when you push to gitlab, then everyone know your token id include me. lol

所以這邊就是混這和用了, 假設我 terraform 上面的 my_ip 是很敏感的資料 ,所以我應該這樣下

terraform apply -var-file="variables-dev.tfvars" -var="my_ip=123.145.167.189"

因為 command 上面的資訊只有執行的server 會知道,例如 gitlab ci server,但是這個台server 知道也不會怎樣,總比我知道好

以上就是一些小知識拉~


Reference

https://github.com/aws-ia/terraform-aws-eks-blueprints/tree/main/patterns/karpenter

https://godleon.github.io/blog/DevOps/terraform-input-variables/


上一篇
{Day 10: Terraform resource}
下一篇
{Day 12: Terraform variable tips- part 2}
系列文
Don't be a Machine Learning Engineer30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言